import java.io.*;

public class threadDemo extends Thread
    {
    private int countDown = 100;
    private static int threadCount = 0;
   
    public threadDemo()
        {    
        super("" + ++threadCount); // Store the thread name
        start();
        }

    public String toString()
        {
        return "#" + getName() + ": " + countDown;
        }

    public void run()
        {
        while ( true )
            {

            System.out.println(this);
            if(--countDown == 0) 
                return;

            try
                {
                Thread.sleep(1000);
                }
            catch (InterruptedException e)
                {
                e.printStackTrace();
                }

            }
        }

    public static void main(String[] args)
        {
        for(int i = 0; i < 5; i++)
            new threadDemo ();
        }

    }

// Laborator
//
// 1. Observati ordinea de executie a instructiunilor. Cum s-ar fi executat aceste instructiuni in cazul nefolosirii thread-urilor ?
// 2. Modificati programul astfel incat
//      a) Timpul de executie din interiorul fiecarui thread sa fie diferit ( aleator )
//      b) Afisarea mesajelor sa includa numele de tip cuvant ( altul decat cel de tip numar intreg ), data si ora
//      c) Pe o foaie de hartie, trasati schema de executie a programului de mai sus 
// 3. Creati o noula clasa ce implementeaza urmatoarea problema: creeaza 4 thread-uri. ( in fiecare thread Sleep=1000)
//      a) Primul thread are ca rol afisarea unui mesaj ce contine [Data][Ora]. Se va afisa cate un mesaj la fiecare secunda
//      b) Al doilea thread are ca rol afisarea unui mesaj: "Au mai trecut 10 secunde : <contor>" afisat la fiecare 10 secunde
//      c) Al treilea thread are ca rol incrementarea variabilei <contor> afisata de thread-ul 2 si setarea variabile <stop> adevarat, daca contorul este egal cu 100
//      d) Al 4-lea thread are ca rol citirea de la tastatura a unei litere. Daca litera este X, seteaza variabila <stop> adevarat
//    Toate cele 4 thread-uri de mai sus vor rula atata timp cat variabila <stop> este fals
//      
// Casa
// Realizati sortarea cu metoda bulelor a unui sir (general aleator) in felul urmator:
// Separati sirul in doua: prima jumatate pana la n/2 iar a doua de la n/2 la final, unde n numarul de elemente
// Pe un thread sortati cu metoda bulelor prima jumatate, iar pe alt thread sortati a doua jumatate.
// Apoi reuniti cele doua siruri astfel: sortati-le prin interclasare.
// Comparati pentru acelasi sir timpul sortarii prin metoda clasica si timpul sortarii prin metoda cu thread-uri.
// Cum va voi nota:
// - daca tema intarzie mai mult de doua saptamani nu o mai consider;
// - daca nu se compileaza nu ma uit peste ele;
// - verific functionalitatea pe un exemplu ales de mine. Daca nu functioneaza
// conform asteptarilor, va scad 1p, va trimit sursele inapoi urmand ca voi sa
// corectati, urmind ca eu sa aplic acelasi procedeu pana tema
// va merge corect; fiecare corectura costa.
// - temele duplicat sau aproape identice le voi colecta si voi imparti nota la numarul autorilor
